package com.sojson.util.async;

import java.util.List;

import com.sojson.util.async.interfaces.PageHandle;
import com.sojson.util.async.interfaces.PageHandleDefault;

/**
 * 分页处理器工具类
 * 
 * @author liu
 * @date 2021-08-15
 */
public class PageHandleUtil<T> {

    /** 第几页默认值 */
    public static final int PAGE_NUM_DEFAULT = 1;
    /** 所有页 */
    public static final int PAGE_NUM_ALL = -1;
    /** 每页显示记录数默认值 */
    public static final int PAGE_SIZE_DEFAULT = 1000;
    /** 所有记录 */
    public static final int PAGE_SIZE_ALL = -1;
    /** 排序字段默认值 */
    public static final String ORDER_BY_COLUMN_DEFAULT = null;
    /** 是否分页默认值(默认分页) */
    public static final boolean IS_PAGE = true;
    /** 后面查询的数据是否是下一页的数据(true:一直查下一页的数据:false:一直查当前页的数据)(默认一直查当前页的数据) */
    public static final boolean IS_NEXT_PAGE = false;

    /**
     * 获取分页处理器(一直获取当前页数据)
     * 
     * @return
     */
    public static <T> PageHandle<T> getPageHandleThis() {
        return getPageHandleThis(ORDER_BY_COLUMN_DEFAULT);
    }

    /**
     * 获取分页处理器(一直获取当前页数据)
     * 
     * @param orderByColumn 查询数据的排序字段
     * @return
     */
    public static <T> PageHandle<T> getPageHandleThis(String orderByColumn) {
        PageHandle<T> pageHandle = new PageHandle<T>(orderByColumn) {
            @Override
            public void update(List<T> list) {

            }
        };
        pageHandle.setIsPage(true);
        return pageHandle;
    }

    /**
     * 获取分页处理器(一直获取当前页数据)
     * 
     * @param list  数据
     * @return
     */
    public static <T> PageHandle<T> getPageHandleThis(List<T> list) {
        return getPageHandleThis(list, ORDER_BY_COLUMN_DEFAULT);
    }

    /**
     * 获取分页处理器(一直获取当前页数据)
     * 
     * @param list          数据
     * @param orderByColumn 查询数据的排序字段
     * @return
     */
    public static <T> PageHandle<T> getPageHandleThis(List<T> list, String orderByColumn) {
        PageHandle<T> pageHandle = new PageHandle<T>(list, orderByColumn) {
            @Override
            public void update(List<T> list) {

            }
        };
        pageHandle.setIsPage(true);
        return pageHandle;
    }

    /**
     * 获取分页处理器(一直获取下一页数据)
     * 
     * @return
     */
    public static <T> PageHandle<T> getPageHandleNext() {
        return getPageHandleNext(ORDER_BY_COLUMN_DEFAULT);
    }

    /**
     * 获取分页处理器(一直获取下一页数据)
     * 
     * @param orderByColumn 查询数据的排序字段
     * @return
     */
    public static <T> PageHandle<T> getPageHandleNext(String orderByColumn) {
        return new PageHandleDefault<>(orderByColumn);
    }

    /**
     * 获取分页处理器(一直获取下一页数据)
     * 
     * @param list  数据
     * @return
     */
    public static <T> PageHandle<T> getPageHandleNext(List<T> list) {
        return getPageHandleNext(list, null);
    }

    /**
     * 获取分页处理器(一直获取下一页数据)
     * 
     * @param list          数据
     * @param orderByColumn 查询数据的排序字段
     * @return
     */
    public static <T> PageHandle<T> getPageHandleNext(List<T> list, String orderByColumn) {
        PageHandle<T> pageHandle = new PageHandleDefault<>(list, orderByColumn);
        pageHandle.setIsPage(true);
        return pageHandle;
    }

}